/*
 * author: Andriamananony, Meß, Falk
 */

package plan;

import util.Interval;
import auftrag.Auftrag;
import auftrag.Operation;
import auftrag.Produkt;
import auftrag.Ressource;
import auftrag.Variante;

public class Belegung implements Comparable<Belegung> {
	private Auftrag mAuftrag;
	private Produkt mProdukt;
	private Variante mVariante;
	private Operation mOperation;

	private Ressource mResource;
	private Interval mInterval;
	
	public Belegung(Operation o, Interval i){
		mAuftrag = o.getParent().getParent().getParent();
		mProdukt = o.getParent().getParent();
		mVariante = o.getParent();
		mOperation = o;
		mResource = o.getRessource();
		mInterval = i;
	}
	
	public Auftrag getAuftrag() {
		return mAuftrag;
	}

	public Produkt getProdukt() {
		return mProdukt;
	}

	public Variante getVariante() {
		return mVariante;
	}

	public Operation getOperation() {
		return mOperation;
	}

	public Ressource getResource() {
		return mResource;
	}

	public Interval getInterval() {
		return mInterval;
	}

	/**
	 * Vergleicht b1 und b2 mit b1.compareTo(b2) und gibt -1 zurück, falls b1 vor b2 beginnt oder endet, 1, falls b2 vor b1 beginnt oder endet und 0, falls beide Belegungen zur gleichen Zeit liegen
	 */
	@Override
	public int compareTo(Belegung b) {
		return mInterval.compareTo(b.mInterval);
	}
	
	/**
	 * Gibt wahr zurück, falls zwei Belegungen die gleiche Ressource nutzen und ihre Intervalle sich überlappen.
	 */
	public boolean overlaps(Belegung b){
		return (getResource() == b.getResource() && getInterval().overlapsWith(b.getInterval()));
	}
}
